home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet internetowy / Mapy / NASA World Wind 1.3.5 / World_Wind_1.3.5_Full.exe / Plugins / Clock.cs
Text File  |  2006-05-01  |  4KB  |  120 lines

  1. //----------------------------------------------------------------------------
  2. // NAME: On-Screen Clock 
  3. // VERSION: 1.1
  4. // DESCRIPTION: Clock sample, adds itself in layer manager - demonstrates adding a renderable object, drawing on screen (C#)
  5. // DEVELOPER: Bjorn Reppen aka "Mashi"
  6. // WEBSITE: http://www.mashiharu.com
  7. //----------------------------------------------------------------------------
  8. //
  9. // This file is in the Public Domain, and comes with no warranty. 
  10. //
  11. using Microsoft.DirectX;
  12. using Microsoft.DirectX.Direct3D;
  13. using System;
  14. using System.Drawing;
  15. using WorldWind;
  16. using WorldWind;
  17. using WorldWind.Renderable;
  18.  
  19. namespace Mashiharu.PluginSample
  20. {
  21.     public class ClockPlugin : WorldWind.PluginEngine.Plugin
  22.     {
  23.         Clock clock;
  24.         
  25.         /// <summary>
  26.         /// Plugin entry point - All plugins must implement this function
  27.         /// </summary>
  28.         public override void Load()
  29.         {
  30.             // Add us to the list of renderable objects - this puts us in the render loop
  31.             clock = new Clock(Application);
  32.             Application.WorldWindow.CurrentWorld.RenderableObjects.Add(clock);
  33.         }
  34.  
  35.         /// <summary>
  36.         /// Unloads our plugin
  37.         /// </summary>
  38.         public override void Unload()
  39.         {
  40.             Application.WorldWindow.CurrentWorld.RenderableObjects.Remove(clock.Name);
  41.         }
  42.     }
  43.  
  44.     /// <summary>
  45.     /// Clock Example : Display the current time 
  46.     /// </summary>
  47.     public class Clock : RenderableObject
  48.     {
  49.         int color = Color.Yellow.ToArgb();
  50.         const int distanceFromCorner = 5;
  51.         MainApplication ww;
  52.  
  53.         public Clock(MainApplication app) : base("Clock", Vector3.Empty, Quaternion.Identity)
  54.         {
  55.             this.ww = app;
  56.             
  57.             // We want to be drawn on top of everything else
  58.             this.RenderPriority = RenderPriority.Icons;
  59.  
  60.             // true to make this layer active on startup, this is equal to the checked state in layer manager
  61.             this.IsOn = true;
  62.         }
  63.  
  64.         /// <summary>
  65.         /// Plugin entry point - All plugins must implement this function
  66.         /// </summary>
  67.         public void Load()
  68.         {
  69.             // Add us to the list of renderable objects - this puts us in the render loop
  70.             ww.WorldWindow.CurrentWorld.RenderableObjects.Add(this);
  71.         }
  72.  
  73.         /// <summary>
  74.         /// This is where we do our rendering 
  75.         /// Called from UI thread = UI code safe in this function
  76.         /// </summary>
  77.         public override void Render(DrawArgs drawArgs)
  78.         {
  79.             // Draw the current time using default font in lower right corner
  80.             string text = DateTime.Now.ToString();
  81.             Rectangle bounds = drawArgs.defaultDrawingFont.MeasureString(null, text, DrawTextFormat.None, 0);
  82.             drawArgs.defaultDrawingFont.DrawText(null, text, 
  83.                 drawArgs.screenWidth-bounds.Width-distanceFromCorner, drawArgs.screenHeight-bounds.Height-distanceFromCorner,
  84.                 color );
  85.         }
  86.  
  87.         /// <summary>
  88.         /// RenderableObject abstract member (needed) 
  89.         /// OBS: Worker thread (don't update UI directly from this thread)
  90.         /// </summary>
  91.         public override void Initialize(DrawArgs drawArgs)
  92.         {
  93.         }
  94.  
  95.         /// <summary>
  96.         /// RenderableObject abstract member (needed)
  97.         /// OBS: Worker thread (don't update UI directly from this thread)
  98.         /// </summary>
  99.         public override void Update(DrawArgs drawArgs)
  100.         {
  101.         }
  102.  
  103.         /// <summary>
  104.         /// RenderableObject abstract member (needed)
  105.         /// OBS: Worker thread (don't update UI directly from this thread)
  106.         /// </summary>
  107.         public override void Dispose()
  108.         {
  109.         }
  110.  
  111.         /// <summary>
  112.         /// RenderableObject abstract member (needed)
  113.         /// Called from UI thread = UI code safe in this function
  114.         /// </summary>
  115.         public override bool PerformSelectionAction(DrawArgs drawArgs)
  116.         {
  117.             return false;
  118.         }
  119.     }
  120. }